home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / doc.exe / STRINGS.DOC < prev    next >
Text File  |  1992-02-15  |  15KB  |  449 lines

  1.   ─────────────────────────────────────────────────────────────────────────────
  2.   Dokumentation zur Datei: STRINGS.INC
  3.  
  4.   ─────────────────────────────────────────────────────────────────────────────
  5.    
  6.     STRINGS.INC  - Routinen zur Stringbearbeitung
  7.                    (für den Assembler A86)
  8.    
  9.                    (c) Bernd Schemmer 1990 - 1992
  10.                    Letzter Update: 15.02.1992
  11.    
  12.     ■ Beschreibung:
  13.     ---------------
  14.    
  15.     Alle Routinen und Macros dieser Datei erwarten einen String im
  16.     (Turbo-)Pascal-Format, d.h. mit führendem Längenbyte.
  17.    
  18.     Der Aufbau eines Strings wie er von den Routinen erwartet wird
  19.     ist also folgendermaßen:
  20.    
  21.          Offset   |   Bedeutung
  22.         ----------+-----------------------------------------------
  23.            0      |   Länge der folgenden Zeichenkette
  24.                   |   (OHNE dieses Byte, Binärzahl ohne Vorzeichen
  25.                   |    ->> max. Länge: 255 )
  26.          1..n     |   Zeichenkette
  27.    
  28.     Die max. Länge eines Strings incl. Längen-Byte ist also 256 Byte.
  29.    
  30.    
  31.     ■ Einschränkungen:
  32.     ------------------
  33.     Die Routinen überrüfen NICHT ob ein korrekter String vorliegt.
  34.    
  35.     Die Routinen gehen davon aus, daß für die jeweilige Aktion der
  36.     Speicherplatz des Strings ausreicht.
  37.    
  38.     Strings dürfen nicht über eine Segment-Grenze gehen.
  39.    
  40.     Es ist jeweils vermerkt, ob die Quell- und Zielstrings für die
  41.     Routinen gleich sein dürfen. (Eine Überprüfung findet nicht statt!)
  42.    
  43.     Alle Routinen berücksichtigen leere Strings (->> Länge = 0).
  44.    
  45.     Alle Routinen benutzen das Register AX als Arbeitsregister und
  46.     verändern das Directionflag.
  47.    
  48.    
  49.     ■ Routinen:
  50.     -----------
  51.     Upcase                - Konvertiert ein Zeichen in Großbuchstaben
  52.     Lowcase               - Konvertiert ein Zeichen in Kleinbuchstaben
  53.     LowStr                - Konvertiert einen String in Kleinbuchstaben
  54.     Upstr                 - Konvertiert einen String in Großbuchstaben
  55.     InsertChar            - Fügt ein Zeichen in einem String ein
  56.     InsertStr             - Fügt einen Teilstring in einem String ein
  57.     DelChar               - Löscht ein Zeichen in einem String
  58.     DelStr                - Löscht einen TeilString in einem String
  59.     DelChars              - Löscht alle Vorkommen eines Zeichens in einem
  60.                             String
  61.     StripChars            - Ersetzt alle Teilketten aus einem Zeichen in
  62.                             einem String durch ein Zeichen
  63.     PosChar               - Ermittelt die Position eines Zeichens in einem
  64.                             String
  65.     PosStr                - Ermittelt die Position einer Zeichenkette in
  66.                             einem String
  67.     NotPosChar            - Ermittelt die Position des ersten Zeichens
  68.                             ungleich einem vorgegebenen Zeichen in einem
  69.                             String
  70.     CompareStr            - Vergleicht zwei Strings
  71.     TranslateChars        - Übersetzt alle Vorkommen eines Zeichens in
  72.                             einem String in ein anderes
  73.     TranslateStr          - Übersetzt einen String mit Hilfe zweier Tabellen
  74.     SubStr                - Extrahiert einen Teilstring aus einem String
  75.     ParseStr              - Trennt einen String ab einem vorgebbaren Zeichen
  76.     ConcatStr             - Kettet zwei Strings zusammen
  77.     MoveStr               - Kopiert einen String
  78.     DOSStrToStr           - Konvertiert einen DOS-String ins Stringformat
  79.     StrToDOSStr           - Konvertiert einen String ins DOS-Format
  80.    
  81.    
  82.     ----------------------------
  83.     DeleteStr
  84.    
  85.     Funktion:  Macro zum Löschen eines Strings
  86.    
  87.     Aufruf:    DeleteStr
  88.    
  89.     Eingabe:   DS:SI -> String
  90.    
  91.     Ausgabe:   AL = Länge des Strings vor dem Löschen
  92.    
  93.     Bes.:      Der String wird nur logisch gelöscht (durch Setzen
  94.                des Längenzählers auf 0).
  95.    
  96.    
  97.     ----------------------------
  98.     MakeStr
  99.    
  100.     Funktion:  Macro zum Erstellen eines Strings mit einer vorgebbaren
  101.                Anzahl gleicher Zeichen
  102.    
  103.     Aufruf:    MakeStr
  104.    
  105.     Eingabe:   ES:DI -> String
  106.                AL = Zeichen für den String
  107.                CL = Anzahl der Zeichen im String
  108.    
  109.     Ausgabe:   ES:DI -> String
  110.    
  111.    
  112.     ----------------------------
  113.     CharToStr
  114.    
  115.     Funktion:  Macro für die Zuweisung eines Zeichens an einen String
  116.    
  117.     Aufruf:    CharToStr
  118.    
  119.     Eingabe:   DS:SI -> String
  120.                AL = Zeichen
  121.    
  122.     Bes.:      Der vorherige Inhalt des Strings wird überschrieben.
  123.    
  124.    
  125.     ----------------------------
  126.     StrToChar
  127.    
  128.     Funktion:  Macro für die Konveriterunge eines Strings mit der Länge 1
  129.                in ein Zeichen
  130.    
  131.     Aufruf:    StrToChar
  132.    
  133.     Eingabe:   DS:SI -> String
  134.    
  135.     Ausgabe:   CF = 1 ->> Fehler
  136.                           String hat mehr als ein Zeichen
  137.                CF = 0 ->> okax
  138.                           AL = erstes und einziges Zeichen des Strings
  139.    
  140.    
  141.     ----------------------------
  142.     Length
  143.    
  144.     Funktion:  Macro zur Ermittlung der Länge eines Strings
  145.    
  146.     Aufruf:    Length
  147.    
  148.     Eingabe:   DS:SI -> String
  149.    
  150.     Ausgabe:   CX = Länge des Strings
  151.                ZF = 1 ->> String ist leer
  152.                ZF = 0 ->> String ist nicht leer
  153.    
  154.    
  155.     ----------------------------
  156.     Upcase
  157.    
  158.     Funktion:   Konvertierung eines Zeichens in einen Großbuchstaben
  159.    
  160.     Eingbabe:   AL = zu konvertierendes Zeichen
  161.    
  162.     Ausgabe:    AL = konvertiertes Zeichen 
  163.    
  164.     Bes.:       Berücksichtigt die Umlaute ä, ö und ü (ß bleibt ß)
  165.    
  166.     ----------------------------
  167.     Lowcase
  168.    
  169.     Funktion:   Konvertierung eines Zeichens in einen Kleinbuchstaben
  170.    
  171.     Eingbabe:   AL = zu konvertierendes Zeichen
  172.    
  173.     Ausgabe:    AL = konvertiertes Zeichen
  174.    
  175.     Bes.:       Berücksichtigt die Umlaute ä, ö und ü (ß bleibt ß)
  176.    
  177.     ----------------------------
  178.     Upstr
  179.    
  180.     Funktion:  Konvertierung eines Strings in Großbuchstaben
  181.    
  182.     Eingabe:   DS:SI -> String
  183.    
  184.     Bes.:       Berücksichtigt die Umlaute ä, ö und ü (ß bleibt ß)
  185.    
  186.     ----------------------------
  187.     LowStr
  188.    
  189.     Funktion:  Konvertierung eines Strings in Kleinbuchstaben
  190.    
  191.     Eingabe:   DS:SI -> String
  192.    
  193.     Bes.:       Berücksichtigt die Umlaute ä, ö und ü (ß bleibt ß)
  194.    
  195.     ----------------------------
  196.     NotPosChar
  197.    
  198.     Funktion:  Ermittelt das erste Zeichen in einen String, das ungleich
  199.                dem vorgegebenen Zeichen ist
  200.    
  201.     Eingabe:   ES:DI -> String
  202.                AL = Zeichen
  203.    
  204.     Ausgabe:   ZF = 1 ->> AX = 0 ->> kein anderes Zeichen enthalten
  205.                                      oder der String ist leer
  206.                ZF = 0 ->> AX = Index des ersten Zeichens ungleich
  207.                                dem vorgegebenen Zeichen
  208.    
  209.     ----------------------------
  210.     PosChar
  211.    
  212.     Funktion:  Testet, ob ein Zeichen im String enthalten ist
  213.    
  214.     Eingabe:   ES:DI -> String
  215.                AL = Zeichen, dessen Index gesucht ist
  216.    
  217.     Ausgabe:   ZF = 1 ->> AX = 0 ->> Zeichen ist nicht enthalten
  218.                ZF = 0 ->> AX = Index des Zeichens
  219.    
  220.     Bes.       Gefunden wird nur das erste Auftreten des Zeichens
  221.                im String.
  222.    
  223.     ----------------------------
  224.     InsertChar
  225.    
  226.     Funktion:  Einfügen eines Zeichens in einen String
  227.    
  228.     Eingabe:   ES:DI -> String
  229.                AL = einzufügende Zeichen
  230.                AH = Index der Einfügestelle. (0 < AH <= 255)
  231.    
  232.     Bes.:      Wird als Index 0 angegeben, so wird als Index 1 genommen.
  233.                Hat der String schon die max. Länge von 255 Zeichen,
  234.                so bricht die Routine mit einem Fehler ab.
  235.                Liegt die Einfügestelle hinter dem String-Inhalt, so wird
  236.                das Zeichen angefügt.
  237.    
  238.     ----------------------------
  239.     InsertStr
  240.    
  241.     Funktion:  Einfügen eines Strings in einen String
  242.    
  243.     Eingabe:   ES:DI -> String
  244.                DS:SI -> einzufügender String
  245.                AL = Index bei dem eingefügt werden soll
  246.    
  247.     Ausgabe:   CF = 0 ->> String eingefügt
  248.                CF = 1 ->> Fehler aufgetreten
  249.    
  250.     Bes.:      Die Strings müssen verschieden sein!
  251.                Wird als Index 0 angegeben, so wird als Index 1 genommen.
  252.                Übersteigt die Länge des Strings plus der Länge des
  253.                einzufügenden Strings 255, so bricht die Routine mit einem
  254.                Fehler ab.
  255.                Liegt die Einfügestelle hinter dem String-Inhalt, so wird
  256.                der neue String angefügt.
  257.    
  258.     ----------------------------
  259.     DelChars
  260.    
  261.     Funktion:  Löschen aller Vorkommen eines Zeichens aus einem String
  262.    
  263.     Eingabe:   DS:SI -> String
  264.                AL = zu löschendes Zeichen
  265.    
  266.     Ausgabe:   AX = Anzahl der gelöschten Zeichen
  267.    
  268.     ----------------------------
  269.     StripChars
  270.    
  271.     Funktion:  Ersetzt alle Teilketten im String, die nur aus dem
  272.                vorgegebenen Zeichen bestehen durch ein Zeichen
  273.    
  274.                Beispiel: Die Zeichenkette 'aabbaaacdaraaa'
  275.                          wird durch Aufruf der Routine mit  AL = 'a'
  276.                          zu 'abbacdara' konvertiert.
  277.    
  278.     Eingabe:   DS:SI -> String
  279.                AL = zu entfernendes Zeichens
  280.    
  281.     Ausgabe:   AX = Anzahl der entfernten Zeichen
  282.    
  283.     ----------------------------
  284.     DelChar
  285.    
  286.     Funktion:  Löschen eines Zeichens aus einem String
  287.    
  288.     Eingabe:   DS:SI -> String
  289.                AL = Index des zu löschenden Zeichens
  290.    
  291.     Bes.:      Wird als Index 0 angegeben, so wird als Index 1 genommen.
  292.    
  293.                Ist der Index größer als die Länge des Strings,
  294.                so wird kein Zeichen gelöscht.
  295.    
  296.     ----------------------------
  297.     DelStr
  298.    
  299.     Funktion:  Löschen eines TeilStrings in einen String
  300.    
  301.     Eingabe:   DS:SI -> String
  302.                AL = Index ab dem gelöscht werden soll (incl.)
  303.                AH = Länge des zu löschenden TeilStrings
  304.    
  305.     Bes.:      Wird als Index 0 angegeben, so wird als Index 1 genommen.
  306.                Ist der Index größer als die Stringlänge, so wird nichts
  307.                gelöscht.
  308.                Wird als Länge des zu löschenden Teilstrings 0 angegeben,
  309.                so wird nichts gelöscht.
  310.                Falls die Länge des zu löschenden Teilstrings die Länge
  311.                des Rest-Strings ab den angegebenen Index übersteigt, so
  312.                wird nur der Rest-String gelöscht.
  313.    
  314.     ----------------------------
  315.     ConcatStr
  316.    
  317.     Funktion:  Zusammenketten der Strings in den Zielstring
  318.    
  319.     Eingabe:   ES:DI -> ZielString
  320.                DS:SI -> QuellString
  321.    
  322.     Bes.:      ZielString gleich QuellString ist erlaubt.
  323.                Falls die Länge von Zielstring + Quellstring größer
  324.                als 255 ist, wird nur der erste Teil des Quellstrings
  325.                übernommen.
  326.    
  327.     ----------------------------
  328.     MoveStr
  329.    
  330.     Funktion:  Kopiert den Quellstring in den Zielstring
  331.    
  332.     Eingabe:   DS:SI -> Quellstring
  333.                ES:DI -> Zielstring
  334.    
  335.     Bes.:      ZielString gleich QuellString ist erlaubt.
  336.    
  337.     ----------------------------
  338.     SubStr
  339.    
  340.     Funktion:  Kopiert den Quellstring ab den Index in den Zielstring
  341.    
  342.     Eingabe:   DS:SI -> Quellstring
  343.                ES:DI -> Zielstring
  344.                AL = Index, ab dem kopiert werden soll
  345.                AH = Länge des Teilstrings der kopiert werden soll
  346.    
  347.     Bes.:      ZielString sollte ungleich QuellString sein!
  348.                Wird als Index 0 angegeben, so wird als Index 1 genommen.
  349.    
  350.     ----------------------------
  351.     ParseStr
  352.    
  353.     Funktion:  Trennt einen String ab einem vorgegebenen Zeichen
  354.    
  355.     Eingabe:   DS:SI -> Quellstring
  356.                ES:DI -> Puffer für den Zielstring.
  357.                AL = Trennzeichen (wird in keinen Teil übernommen)
  358.    
  359.     Ausgabe:   DS:SI -> vorderer Teil
  360.                ES:DI -> hinterer Teil
  361.    
  362.     Bes.:      Zielstring muß ungleich Quellstring sein, bei mehreren
  363.                Vorkommen des Trennzeichens wird beim ersten Vorkommen
  364.                getrennt.
  365.    
  366.     ----------------------------
  367.     StrToDOSStr
  368.    
  369.     Funktion:  Konvertierung eines Strings ins DOS-Format
  370.    
  371.     Eingabe:   DS:SI -> Quellstring
  372.                ES:DI -> Zielstring
  373.                AL = Ende-Kennzeichen (0-Byte oder '$')
  374.    
  375.     Bes.:      Quellstring gleich Zielstring ist erlaubt.
  376.    
  377.     ----------------------------
  378.     DOSStrToStr
  379.    
  380.     Funktion:  Konvertierung eines DOS-Strings ins String-Format
  381.                (mit Zähler, ohne $ (bzw. 0) am Ende)
  382.    
  383.     Eingabe:   DS:SI -> Quellstring
  384.                ES:DI -> Zielstring (wird auf max. 255 Byte gekürzt)
  385.                AL = Ende-Kennzeichen (0-Byte oder '$')
  386.    
  387.     Bes.:      Zielstring gleich Quellstring ist nicht erlaubt.
  388.    
  389.                Falls der Quellstring mehr als 255 Zeichen hat, werden
  390.                nur die ersten 255 Zeichen übernommen.
  391.    
  392.     ----------------------------
  393.     TranslateChars
  394.    
  395.     Funktion:  Übersetzt jedes im Quellstring vorkommende Qellzeichen
  396.                durch das Zielzeichen
  397.    
  398.     Eingabe:   ES:DI -> Quellstring
  399.                AL = Quellzeichen
  400.                AH = Zielzeichen
  401.    
  402.     Ausgabe:   BX = Anzahl der übersetzten Zeichen
  403.    
  404.     ----------------------------
  405.     PosStr
  406.    
  407.     Funktion:  Ermittelt den Index einer Zeichenkette in einem String
  408.    
  409.     Eingabe:   DS:SI -> TeilString
  410.                ES:DI -> String
  411.    
  412.     Ausgabe:   AX = Index (0 falls nicht vorhanden)
  413.    
  414.     Bes.:      Ein leerer Teilstring ist nie im String vorhanden.
  415.    
  416.     ----------------------------
  417.     CompareStr
  418.    
  419.     Funktion:  Vergleicht zwei Strings
  420.    
  421.     Eingabe:   DS:SI -> 1. String
  422.                ES:DI -> 2. String
  423.    
  424.     Ausgabe:   Flags wie nach CMP string1,string2
  425.    
  426.     ----------------------------
  427.     TranslateStr
  428.    
  429.     Funktion:  Übersetzt alle Zeichen aus dem Quellstring die im
  430.                Quellzeichen-String vorhanden sind durch das Zeichen
  431.                mit dem gleichen Index im Zielzeichen-String
  432.    
  433.     Eingabe:   ES:DI -> Quellstring
  434.                DS:SI -> Quellzeichen-String
  435.                DS:DX -> Zielzeichen-String
  436.    
  437.     z.B.  ES:DI -> String mit der Zeichenkette 'a.bcd#efgh1'
  438.                    (= Quellstring)
  439.           DS:SI -> String mit der Zeichenkette '.#0123456789'
  440.                    (= Quellzeichenstring)
  441.           DS:DX -> String mit der Zeichenkette ':^=!"$%&/()'
  442.                    (= Zielzeichenstring)
  443.    
  444.           Ergebnis: Der String ES:DI wird folgendermaßen konvertiert:
  445.                                                'a:bcd^efgh!'
  446.                                                  ^   ^    ^
  447.                     Konvertiert wurden ──────────┴───┴────┘
  448.    
  449.